#include <stdio.h>
#include <malloc.h>
#include <mqoai.h>

typedef char VertexType; // 顶点类型用户可自定义
typedef int EdgeType; // 边上的权值类型用户可自定义
# define MAXVEX 9 // 最大顶点数，可自定义
# define INFINITY 65535 // 用65535表示无穷
Boolean visited[MAXVEX]; // 访问标志的数组

// 邻接矩阵的定义
typedef struct Vertex{
    VertexType vex[MAXVEX];
    EdgeType arc[MAXVEX][MAXVEX];
    int numNodes, numEdges;
}MGragh;

void DFS(MGragh G, int i) {
    int j;
    visited[i] = TRUE; // 访问过的设置为 TRUE
    printf("%c", G.vex[i]); // 打印出来，表示访问到了
    for(j = 0; j < G.numNodes; j++) {
        // 对未访问过的邻接点递归调用
        if(G.arc[i][j] == 1 && !visited[i]) {
            DFS(G, i);
        }
    }
}

// 深度遍历
void DFSTraverse(MGragh G) {
    int i;
    // 初始化访问数组，默认均为FALSE，即未被访问过
    for (i = 0; i < G.numNodes; i++) {
        visited[i] = FALSE;
    }
    // 未访问过的顶点就调用DFS，若为连通图仅执行一次
    for(i = 0; i < G.numNodes; i++) {
        if(!visited[i]) {
            DFS(G, i);
        }
    }
}